Patch by Marshall Clow to make the assignment operators of piecewise_constant_distribution and piecewise_linear_distribution exception safe. git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@116404 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/include/random b/include/random index 5a74f63..6bbde22 100644 --- a/include/random +++ b/include/random
@@ -5938,6 +5938,7 @@ template<class _UnaryOperation> param_type(size_t __nw, result_type __xmin, result_type __xmax, _UnaryOperation __fw); + param_type & operator=(const param_type& __rhs); _LIBCPP_INLINE_VISIBILITY vector<result_type> intervals() const {return __b_;} @@ -6048,6 +6049,23 @@ }; template<class _RealType> +typename piecewise_constant_distribution<_RealType>::param_type & +piecewise_constant_distribution<_RealType>::param_type::operator= + (const param_type& __rhs) +{ +// These can throw + __b_.reserve (__rhs.__b_.size ()); + __densities_.reserve(__rhs.__densities_.size()); + __areas_.reserve (__rhs.__areas_.size()); + +// These can not throw + __b_ = __rhs.__b_; + __densities_ = __rhs.__densities_; + __areas_ = __rhs.__areas_; + return *this; +} + +template<class _RealType> void piecewise_constant_distribution<_RealType>::param_type::__init() { @@ -6239,7 +6257,8 @@ template<class _UnaryOperation> param_type(size_t __nw, result_type __xmin, result_type __xmax, _UnaryOperation __fw); - + param_type & operator=(const param_type& __rhs); + _LIBCPP_INLINE_VISIBILITY vector<result_type> intervals() const {return __b_;} _LIBCPP_INLINE_VISIBILITY @@ -6349,6 +6368,24 @@ }; template<class _RealType> +typename piecewise_linear_distribution<_RealType>::param_type & +piecewise_linear_distribution<_RealType>::param_type::operator= + (const param_type& __rhs) +{ +// These can throw + __b_.reserve (__rhs.__b_.size ()); + __densities_.reserve(__rhs.__densities_.size()); + __areas_.reserve (__rhs.__areas_.size()); + +// These can not throw + __b_ = __rhs.__b_; + __densities_ = __rhs.__densities_; + __areas_ = __rhs.__areas_; + return *this; +} + + +template<class _RealType> void piecewise_linear_distribution<_RealType>::param_type::__init() {